package Soligee.controller.bo;

import Soligee.controller.facade.sessionFacadeImplements.SessionFacadeBuscarImplements;
import Soligee.decorador.DecoradorNF;
import Soligee.model.vo.cadastros.ProdutoVO;
import Soligee.model.vo.lancamentos.ItensOrcamentoVO;
import java.util.ArrayList;
import java.util.Iterator;
import java.util.List;

public class OrcamentoBO {

    private double valorTotalOrcamento;
    //valor total dos produtos
    private double valorTotalProdutos;

    public List<ProdutoVO> listaProdutos = new ArrayList();

    public double getValorTotalOrcamento() {
        return valorTotalOrcamento;
    }

    public void setValorTotalOrcamento(double valorTotalOrcamento) {
        this.valorTotalOrcamento = valorTotalOrcamento;
    }

    public double getValorTotalProdutos() {
        return valorTotalProdutos;
    }

    public void setValorTotalProdutos(double valorTotalProdutos) {
        this.valorTotalProdutos = valorTotalProdutos;
    }

    public double calculaTotalOrcamentoProduto(List lista) {
        ItensOrcamentoVO itensOrcamento;
        double total = 0;
        try{
            for (int i = 0; i < lista.size(); i++) {
                itensOrcamento = (ItensOrcamentoVO) lista.get(i);
                total += itensOrcamento.getTotal();
            }
        }catch (ArrayIndexOutOfBoundsException ex){
                System.err.println("Erro:" + ex.getMessage());
        }
        return total;
    }

    public double calculaItenOrcamento(ItensOrcamentoVO itensOrcamento) {
        double total = 0;
        try{
            total = itensOrcamento.getValorUnitarioItem() * itensOrcamento.getQtdadeItem();
        }
        catch (ArithmeticException ex){
                System.err.println("Erro:" + ex.getMessage());
        }
        return total;
    }

    public double calculaTotalVista(double descontoVista, double totalProduto) {
        double valor=0;
        try{
        valor = (totalProduto * descontoVista) + totalProduto;
        }
        catch (ArithmeticException ex){
                System.err.println("Erro:" + ex.getMessage());
        }
        return valor;
    }

    public double calculaTotalPrazo(double totalProduto, int numParcelas, double juros) {
        double valor=0;
        try{
        valor = ((totalProduto / numParcelas) * juros) * numParcelas;
        }
        catch (ArithmeticException ex){
                System.err.println("Erro:" + ex.getMessage());
        }
        return valor;

    }

    //metodo necessario para montar os itens da tabela
    public List<DecoradorNF> montaItens(int chavePrimaria){
        List<DecoradorNF> listaDecoradora = new ArrayList();
        //facade para busca
        SessionFacadeBuscarImplements facadeBusca = new SessionFacadeBuscarImplements();
        //busca a lista de itens do pedido
       Iterator it =facadeBusca.buscaComItem(ItensOrcamentoVO.class, "orcamento").iterator();
        while(it.hasNext()){
            ItensOrcamentoVO item = (ItensOrcamentoVO)it.next();
                if(item.getChaveComposta().getOrcamento().getCodOrcamento() == chavePrimaria){
                   ProdutoVO produto = (ProdutoVO)facadeBusca.buscaPorCodigo(ProdutoVO.class,"codProduto", item.getChaveComposta().getProduto().getCodProduto())
                            .iterator().next();
                   DecoradorNF decorador = new DecoradorNF();
                   decorador.setCodProduto(produto.getCodProduto());
                   decorador.setDescricaoProduto(produto.getDescricao());
                   decorador.setQuantidade(item.getQtdadeItem());
                   decorador.setValorUnitario(item.getValorUnitarioItem());
                   decorador.setTotal();
                   listaDecoradora.add(decorador);
                   //adiciona os produtos em uma lista para posterior utilização em alterar ou cadastar
                   listaProdutos.add(produto);
                }//fim if
            }//fim while    
        return listaDecoradora;
    }

    public List<ItensOrcamentoVO> finalizaOrcamento(List<DecoradorNF> listaDecoradora){
        List<ItensOrcamentoVO> listaItensOrcamento = new ArrayList();
        //le a lista de decoradores simplismente para coleta de valores
        Iterator it =  listaDecoradora.iterator();
        while (it.hasNext()) {
            //objeto decorador para manipulacao da lista
            DecoradorNF decoradorNF = (DecoradorNF) it.next();
            decoradorNF.getCodProduto();
            //cria um item para cade decorador de acordo com seus valores
            ItensOrcamentoVO itemOrcamento = new ItensOrcamentoVO(decoradorNF.getQuantidade(), decoradorNF.getValorUnitario(), decoradorNF.getTotal());
            listaItensOrcamento.add(itemOrcamento);
        }
        //calcula total dos produtos e seta no objeto criado anteriormente
        double total = 0;
        try{
            for (int i = 0; i < listaItensOrcamento.size(); i++) {
                total += listaItensOrcamento.get(i).getTotal();
            }
        }catch (ArrayIndexOutOfBoundsException ex){
                System.err.println("Erro:" + ex.getMessage());
                ex.getStackTrace();
        }
        this.setValorTotalProdutos(total);
        return listaItensOrcamento;
    }

     // meotodo para calcular o total produtos
    public double calculaTotalProduto(List<DecoradorNF> lista) {
        double total = 0;
        try{
            for (int i = 0; i < lista.size(); i++) {
                total += lista.get(i).getTotal();
            }
        }catch (ArrayIndexOutOfBoundsException ex){
                System.err.println("Erro:" + ex.getMessage());
                ex.getStackTrace();
        }
        return total;
    }


    public List<ProdutoVO> getListaProdutos() {
        return listaProdutos;
    }

    public void setListaProdutos(List<ProdutoVO> listaProdutos) {
        this.listaProdutos = listaProdutos;
    }

    
    
}
